package cz.vse.po1715.lode.hra;

import cz.vse.po1715.lode.net.obecne.SHrac;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/*******************************************************************************
 * Instance třídy {@code Hra} představuje třídu,
 * která se stará o jednotlivé herní úkony.
 *
 * @author Jan Bursa
 * @version 1.00,  1.8.2011
 */

public class Hra {

        public static void startHra() throws IOException {

        System.out.println("Vítejte ve hře lodě");

        String radek = "";
        BufferedReader reader;
        BufferedWriter writer;

        reader = new BufferedReader(new InputStreamReader(System.in));
        writer = new BufferedWriter(new OutputStreamWriter(System.out));

        System.out.println("Zadejte volbu");
        System.out.println("0 - vytvořit hráče");
        System.out.println("1 - rozmístit loď");
        
        radek = reader.readLine();
        if(radek.equals("0")){
            radek = "";
        System.out.println("Zadejte jmené hráče:");
        radek = reader.readLine();
        Hraci.Hrac(radek);}
        if(radek.equals("1")){
            radek = "";
        System.out.println("Zadejte loď");
        radek = reader.readLine();
        Lode.Plavidlo("clun", "h", 1, "v");
        }
        else{System.out.print("Hráč nezadán");}
//        if(radek.equals("hoj")){Hraci.Hrac("karel");}
//        else{
//        System.out.print(radek);}
        }
/*
        for(;;) {

            try {
                radek = reader.readLine();
              try {
                    if (radek.equalsIgnoreCase("start server")) {
                    }

                    if (radek.substring(0,3).equalsIgnoreCase("tah")) {
//                        int x;
                        int y;
                        String[] tahy;
                        tahy = radek.substring(4).split(" ");

                        x = Integer.parseInt(tahy[0]);
                        y = Integer.parseInt(tahy[1]);
                    }

                    if (radek.substring(0,6).equalsIgnoreCase("zprava")) {
                    }

                    if (radek.substring(0,6).equalsIgnoreCase("pripoj")) {
                    }



               } catch (Exception ex) {

               }

            }catch(IOException ioe) {
                throw new RuntimeException("\nChyba při čtení příkazu");
            }
        }
    }*/

    private static int[][] hraci_pole = HraciPole.hraci_pole;
    private static int[][] hraci_pole2 = HraciPole.hraci_pole2;
    private static int x;
    private static int dalsiIDHra = 0;
    public static int lod;


    /** odkazy na instance sitovych verzi hracu, ktery hraji danou hru */
    public SHrac hrac1, hrac2;

    /** id dane hry, slouzi pro instanci SpravceHry, ktery spravuje sitove hry */
    public int idHra;

    private static synchronized int getdalsiIDHra() {
	return dalsiIDHra++;
    }


     /** Metoda která pokládá lodě na hrací plochu
      *
      * @param hrac číslo hráče*/
    public static void RozmisteniLodi(int hrac)
    {
        if(hrac == 1)
        {Lode.Clun("g", 4, "h");
        Lode.Jachta("b", 4, "v");
        Lode.Parnik("a", 1, "h");
        Lode.Tanker("d", 4, "v");
        Lode.Clun("h", 8, "h");
        Lode.Jachta("h", 10, "h");
        Lode.Clun("b", 8, "v");
        HraciPole.getHraciPole();
        if(Lode.pocet_clunu == 0 && Lode.pocet_jachet == 0 && Lode.pocet_parniku == 0 && Lode.pocet_tankeru == 0)
        { System.out.println("Soupeřovo pole:");
            HraciPole.getHraciPole2();
        }
        }
        else if(hrac == 2)
        {Lode.Plavidlo("clun", "d", 2, "h");
        Lode.Clun("d", 2, "h");
        Lode.Jachta("a", 1, "v");
        Lode.Parnik("j", 6, "v");
        Lode.Tanker("d", 5, "h");
        Lode.Clun("g", 3, "h");
        Lode.Jachta("c", 9, "h");
        Lode.Clun("b", 5, "v");
        HraciPole.getHraciPole2();
        if(Lode.pocet_clunu2 == 0 && Lode.pocet_jachet2 == 0 && Lode.pocet_parniku2 == 0 && Lode.pocet_tankeru2 == 0)
        { System.out.println("Soupeřovo pole:");
            HraciPole.getHraciPole();
        }
        }
    }

    /** Metoda která střílí na soupeřovy lodě na
     *
     * @param hrac číslo hráče
     *  @param znak x-ová souřadnice
     *  @param y y-ová souřadnice*/
    public static boolean Strelba(int hrac, String znak, int y)
    {
        boolean zasah = false;
        Hraci.id_hrac = hrac;
        if(Lode.vsechny_lode == true && Lode.vsechny_lode2 == true)
        {
        Ciselnik.Prevodnik(znak);
        x = Ciselnik.vystupni_cislo;
        if(Hraci.id_hrac == 2){lod = hraci_pole[y-1][x];}
        else if(Hraci.id_hrac == 1){lod = hraci_pole2[y-1][x];}
        if (lod == 1){System.out.println("Zásah");
        zasah = true;}
        else if (lod == 3){System.out.println("Sem jsi už jednou střílel :)");}
        else {System.out.println("Vedle jak ta jedle");
        zasah = true;
        }

        if(Hraci.id_hrac == 2){hraci_pole[y-1][x] = 3;}
        if(Hraci.id_hrac == 1){hraci_pole2[y-1][x] = 3;}
        }
        else{System.out.println("V tuto chvíli ještě není možno střílet");
        }
        Konec();
        Konec2();
        return zasah;
    }

    /** Metoda která restartuje celou hru */
    public static void Restart()
    {
        HraciPole.VynulujPole();
        HraciPole.VynulujPole2();
        Lode.pocet_clunu = 3;
        Lode.pocet_jachet = 2;
        Lode.pocet_parniku = 1;
        Lode.pocet_tankeru = 1;
        Lode.pocet_clunu2 = 3;
        Lode.pocet_jachet2 = 2;
        Lode.pocet_parniku2 = 1;
        Lode.pocet_tankeru2 = 1;
        Hraci.id_hrac = 0;
    }

       /** Metoda která zjišťuje, zda hráč 1 vystřílel všechny lodě */
        public static void Konec2()
    {
        for (int i = 0; i < hraci_pole2.length; i++) { //pruchod pres pole poli
        for (int j = 0; j < hraci_pole2[i].length; j++) { //pruchod radkem
        if(hraci_pole2[i][j] == 0 || hraci_pole2[i][j] == 2 || hraci_pole2[i][j] == 3){}
        else {if(hraci_pole2[i][j] == 1){}
        else{System.out.println(i+"-" +j + "Všechny lodě potopeny");}}
        }}
    }
     /** Metoda která zjišťuje, zda hráč 1 vystřílel všechny lodě */
     public static void Konec()
    {
        for (int i = 0; i < hraci_pole.length; i++) { //pruchod pres pole poli
        for (int j = 0; j < hraci_pole[i].length; j++) { //pruchod radkem
        if(hraci_pole[i][j] == 0 || hraci_pole[i][j] == 2 || hraci_pole[i][j] == 3){}
        else {if(hraci_pole[i][j] == 1){}
        else{System.out.println(i+"-" +j + "Všechny lodě potopeny");}}
        }}
    }

    public Hra(SHrac hrac1, SHrac hrac2){
        idHra = getdalsiIDHra();
        this.hrac1 = hrac1;
        this.hrac2 = hrac2;
    }

}

//        //ošetřit rohové body ve kterých je loď
//        if(lod == 1){
//
//           if(
//           hraci_pole[y-2][x] == 1 ||
//           hraci_pole[y-1][x-1] == 1 ||
//           hraci_pole[y-1][x+1] == 1 ||
//           hraci_pole[y][x] == 1)
//           {System.out.println("Zásah");}
//           else {System.out.println("Zásah - loď potopena");}}
//
//           else{System.out.println("Vedle jak ta jedle");}